package com.julius.design.suanfa.queue;

import java.util.Stack;

/**
 * @author julius
 * @date 2021-10-19 上午 10:23
 * <p>
 *     用两个栈实现一个队列。队列的声明如下，请实现它的两个函数 appendTail 和 deleteHead
 *     ，分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素，deleteHead 操作返回 -1 )
 * </p>
 */
public class StackToQueue {
    /**
     * 解题思路：
     *  栈  A   and   B
     *
     *  A 作为尾部插入栈，B作为头部删除栈
     *  当插入时，一直往A栈写数据
     *  当删除时，先判断B栈是否为空，如果为空则先将A中的数据全部移动到B中，再弹出第一个元素，如果B不为空，则弹出B的第一个元素
     */

    private Stack<Integer> vectorA;

    private Stack<Integer> vectorB;

    public StackToQueue(){
        vectorA = new Stack<>();
        vectorB = new Stack<>();
    }

    /**
     * 尾部插入
     * @param value
     */
    public void appendTail(int value){
        vectorA.push(value);
    }

    /**
     * 头部删除
     * @return
     */
    public int deleteHead(){
        if(vectorB.isEmpty()){
            //B 为空 判断A是否为空
            if(vectorA.isEmpty()){
                return -1;
            }
            while (!vectorA.isEmpty()){
                vectorB.push(vectorA.pop());
            }

        }
        return vectorB.pop();
    }


}
